const { readFile } = require('fs')
const EventEmitter = require('events')

class EE extends EventEmitter {}

const yy = new EE()

yy.on('event', () => {
  console.log('出大事了')                        // ---------------------------2
})  

setTimeout(() => {
  console.log('0 毫秒后 到期的 timeout')        // -----------------------6
})

setTimeout(() => {                              // ------------------------- 10
  console.log('100ms 后 到期的 timeout') 
}, 100)

setTimeout(() => {                               // -----------------------11
  console.log('200ms 后 到期的 timeout')
}, 200)
                                                  // 这两个文件 第一轮 poll阶段 还没有读取完 读取时间应该是在 100ms 之内的
                                                  // README 要小于 package.json

readFile('../../package.json', 'utf-8', () => { //  ---------------------------  9
                                                // 第二轮读取完毕
  console.log('完成文件 1 package.json 的 读取')
})
          
readFile('../../README.md', 'utf-8', () => { // ------------------------------------- 8
  console.log('完成文件 2 readme 的读取')
})

setImmediate(() => {                      // ----------------------------------第一轮还没有读取完 先执行 7
  console.log('immediate 回调函数')
})

process.nextTick(() => {
  console.log('process.nextTick 1 的回调')           // ------------------------- 1
})

Promise.resolve().then(() => {                      
  yy.emit('event') // _|
                                                  // 以下三个 属于 本轮循环，当前的队列 一个在 Promise 微任务中，所有在当前队列
                                                  // 清空以后，又会继续去执行 本轮循环中 新增的 process.nextTick队列
  process.nextTick(() => {
    console.log('process.nextTick 2 的回调')       // ---------------------- 5   
  })

  console.log('promise 1 的 回调')               // -------------------------- 3
}).then(() => {
  console.log('promuse 2 的 回调')                 // ---------------------- 4
})